package com.mef.smsplat.web.controller.sys;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.hc24.util.BeanUtilsEx;
import com.hc24.util.IDUtil;
import com.mef.smsplat.dao.base.DataGridModel;
import com.mef.smsplat.dao.base.Page;
import com.mef.smsplat.domain.SysAdminInfoDomain;
import com.mef.smsplat.domain.TempLabelInfoDomain;
import com.mef.smsplat.domain.TempVarInfoDomain;
import com.mef.smsplat.domain.TemplateInfoDomain;
import com.mef.smsplat.service.CacheService;
import com.mef.smsplat.service.TemplateInfoService;
import com.mef.smsplat.util.Constants;
import com.mef.smsplat.web.controller.base.Json;
import com.mef.smsplat.web.controller.qo.TemplateQo;

@Controller
@RequestMapping("/sys/template/")
public class TemplateInfoController {
	private TemplateInfoService templateInfoService;
	private CacheService cacheService;

	public void setTemplateInfoService(TemplateInfoService templateInfoService) {
		this.templateInfoService = templateInfoService;
	}

	public void setCacheService(CacheService cacheService) {
		this.cacheService = cacheService;
	}

	/**
	 * 列表查询
	 * @param qo
	 * @param dgm
	 * @return
	 */
	@ResponseBody
	@RequestMapping("query.sys")
	public Page<TemplateInfoDomain> query(TemplateQo qo, DataGridModel dgm) {
		return templateInfoService.query(qo, dgm);
	}

	@RequestMapping("toAdd.sys")
	public ModelAndView toAdd(){
		List<TempVarInfoDomain> varList = cacheService.getTempVar();
		ModelAndView av=new ModelAndView("page/sys/template/add");
		av.addObject("varList", varList);
		return av;
	}
	
	@RequestMapping("toUpdate.sys")
	public ModelAndView toUpdate(String templateId){
		TemplateInfoDomain template=templateInfoService.getById(templateId);
		
		List<TempVarInfoDomain> varList = cacheService.getTempVar();
		List<TempLabelInfoDomain> labelList=templateInfoService.queryLabel(templateId);
		ModelAndView av=new ModelAndView("page/sys/template/update");
		av.addObject("varList", varList);
		av.addObject("labelList", labelList);
		av.addObject("template", template);
		
		return av;
	}
	
	/**
	 * 批量删除功能
	 * @param templateIds
	 * @return
	 */
	@ResponseBody
	@RequestMapping("del.sys")
	public Json del(String[] ids){
		templateInfoService.removeById(ids);
		return new Json();
	}
	
	@ResponseBody
	@RequestMapping("updateStatus.sys")
	public Json updateStatus(String[] ids,int status){
		templateInfoService.updateStatus(ids, status);
		return new Json();
	}
	
	/**
	 * 增加模版
	 * 
	 * @param domain
	 * @return
	 */
	@ResponseBody
	@RequestMapping("add.sys")
	public Json add(HttpSession session , TemplateInfoDomain domain,
			@RequestParam(value="labelText[]", required=false) String[] labelText,
			@RequestParam(value="labelVal[]", required=false) String[] labelVal,
			@RequestParam(value="labelPre[]", required=false) String[] labelPre){		
	
		//从Session中取得当前登录用户信息，当前是管理员
		SysAdminInfoDomain sys= (SysAdminInfoDomain) session.getAttribute(Constants.SESSION_SYS_ADMIN);
		if(sys!=null){
			domain.setModifyId(sys.getSysAdminId());
			domain.setModifyName(sys.getAdminName());
		}
		
		domain.setTemplateId(IDUtil.next()+"");
		domain.setStatus(Constants.NOMARL);//状态正常
		domain.setModifyTime(new Date());
		
		List<TempLabelInfoDomain> labelList=new ArrayList<TempLabelInfoDomain>();
		for(int i=0;i<labelText.length;i++){
			TempLabelInfoDomain label=new TempLabelInfoDomain();
			label.setTempLabelId(IDUtil.next()+"");
			label.setLabelPre(labelPre[i]);
			label.setLabelText(labelText[i]);
			label.setLabelVal(labelVal[i]);
			if(label.getLabelVal().contains("${")){
				label.setLabelType(Constants.LABEL_TYPE_VAR);//代表变量标签
			}else{
				label.setLabelType(Constants.LABEL_TYPE_TEXT);//代表文本标签
			}
			label.setTemplateId(domain.getTemplateId());
			
			labelList.add(label);
		}
		
		templateInfoService.save(domain,labelList.toArray(new TempLabelInfoDomain[]{}));
		return new Json();
	}
	
	/**
	 * 修改模版
	 * @param domain
	 * @return
	 */
	@ResponseBody
	@RequestMapping("update.sys")
	public Json update(HttpSession session , TemplateInfoDomain domain,
			@RequestParam(value="labelText[]", required=false) String[] labelText,
			@RequestParam(value="labelVal[]", required=false) String[] labelVal,
			@RequestParam(value="labelPre[]", required=false) String[] labelPre){
		//从Session中取得当前登录用户信息，当前是管理员
		SysAdminInfoDomain sys= (SysAdminInfoDomain) session.getAttribute(Constants.SESSION_SYS_ADMIN);
		if(sys!=null){
			domain.setModifyId(sys.getSysAdminId());
			domain.setModifyName(sys.getAdminName());
		}
		domain.setModifyTime(new Date());
		
		TemplateInfoDomain orgDomain=templateInfoService.getById(domain.getTemplateId());
		//BeanUtilsEx.copyProperties(orgDomain, domain);//把新的属性值copy进去
		orgDomain.setModifyId(domain.getModifyId());
		orgDomain.setModifyName(domain.getModifyName());
		orgDomain.setModifyTime(domain.getModifyTime());
		orgDomain.setRemark(domain.getRemark());
		orgDomain.setTemplateContent(domain.getTemplateContent());
		orgDomain.setTemplateName(domain.getTemplateName());
		orgDomain.setTemplateType(domain.getTemplateType());
		
		List<TempLabelInfoDomain> labelList=new ArrayList<TempLabelInfoDomain>();
		for(int i=0;i<labelText.length;i++){
			TempLabelInfoDomain label=new TempLabelInfoDomain();
			label.setTempLabelId(IDUtil.next()+"");
			label.setLabelPre(labelPre[i]);
			label.setLabelText(labelText[i]);
			label.setLabelVal(labelVal[i]);
			if(label.getLabelVal().contains("${")){
				label.setLabelType(Constants.LABEL_TYPE_VAR);//代表变量标签
			}else{
				label.setLabelType(Constants.LABEL_TYPE_TEXT);//代表文本标签
			}
			label.setTemplateId(domain.getTemplateId());
			
			labelList.add(label);
		}
		
		templateInfoService.update(orgDomain,labelList.toArray(new TempLabelInfoDomain[]{}));
		return new Json();
	}
	
	
}
